{
 "cells": [
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "体会卷积层的变化\n",
   "id": "b140d7ca10063ce"
  },
  {
   "cell_type": "code",
   "id": "initial_id",
   "metadata": {
    "collapsed": true,
    "ExecuteTime": {
     "end_time": "2025-09-13T03:55:01.095016Z",
     "start_time": "2025-09-13T03:55:01.089796Z"
    }
   },
   "source": [
    "import torch  # 导入PyTorch库，用于深度学习相关操作\n",
    "from torch.utils.data import dataloader\n",
    "\n",
    "# 定义卷积层的输入输出通道数\n",
    "in_channels, out_channels = 5, 10  # in_channels: 输入特征图的通道数；out_channels: 输出特征图的通道数\n",
    "\n",
    "# 定义输入特征图的空间尺寸\n",
    "width, height = 100, 100  # 输入特征图的宽度和高度\n",
    "\n",
    "# 定义卷积核的大小\n",
    "kernel_size = 3  # 卷积核的尺寸为3x3\n",
    "\n",
    "# 定义批次大小\n",
    "batch_size = 1  # 每次处理的样本数量\n",
    "\n",
    "# 创建随机输入张量\n",
    "# 张量形状为：[batch_size, in_channels, height, width]\n",
    "# 符合PyTorch中卷积层输入的标准格式 (N, C, H, W)\n",
    "input = torch.randn(batch_size, in_channels, height, width)\n",
    "\n",
    "# 创建2D卷积层\n",
    "# in_channels: 输入通道数\n",
    "# out_channels: 输出通道数\n",
    "# kernel_size: 卷积核大小\n",
    "# stride: 步长，默认为1\n",
    "# padding: 填充，默认为0（不填充）\n",
    "con_layer = torch.nn.Conv2d(in_channels=in_channels,\n",
    "                           out_channels=out_channels,\n",
    "                           kernel_size=kernel_size,\n",
    "                           stride=1,\n",
    "                           padding=0)\n",
    "\n",
    "# 对输入执行卷积操作\n",
    "output = con_layer(input)\n",
    "\n",
    "# 打印输入张量的形状\n",
    "# 输出应为: torch.Size([1, 5, 100, 100])\n",
    "print(input.shape)\n",
    "\n",
    "# 打印输出张量的形状\n",
    "# 由于使用3x3卷积核且无填充，输出尺寸计算公式为:\n",
    "# output_size = (input_size - kernel_size + 1) / stride\n",
    "# 因此输出应为: torch.Size([1, 10, 98, 98])\n",
    "print(output.shape)\n",
    "\n",
    "# 打印卷积层权重的形状\n",
    "# 卷积核权重形状为: [out_channels, in_channels, kernel_height, kernel_width]\n",
    "# 因此输出应为: torch.Size([10, 5, 3, 3])\n",
    "print(con_layer.weight.shape)\n"
   ],
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "torch.Size([1, 5, 100, 100])\n",
      "torch.Size([1, 10, 98, 98])\n",
      "torch.Size([10, 5, 3, 3])\n"
     ]
    }
   ],
   "execution_count": 4
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "体会卷积神经网络的构建\n",
    "\n"
   ],
   "id": "9e36dcdfc6d30190"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-09-13T04:14:51.666809Z",
     "start_time": "2025-09-13T04:14:08.627274Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 导入PyTorch核心库：用于构建神经网络、张量计算和自动求导\n",
    "import torch\n",
    "# 从torchvision导入数据集、预训练模型和数据预处理工具\n",
    "from torchvision import datasets, transforms\n",
    "# 从torch.utils.data导入DataLoader：用于批量加载数据\n",
    "from torch.utils.data import DataLoader\n",
    "# 导入PyTorch的函数式API：提供激活函数等无状态操作\n",
    "import torch.nn.functional as F\n",
    "# 导入PyTorch优化器库：提供SGD等优化算法\n",
    "import torch.optim as optim\n",
    "# 导入matplotlib绘图库：用于绘制训练损失和准确率曲线\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "# 设置中文显示：解决matplotlib绘图时中文乱码问题\n",
    "plt.rcParams[\"font.family\"] = [\"SimHei\", \"WenQuanYi Micro Hei\", \"Heiti TC\"]\n",
    "plt.rcParams[\"axes.unicode_minus\"] = False\n",
    "\n",
    "# 定义超参数\n",
    "batch_size = 64        # 每批次处理的样本数量\n",
    "learning_rate = 0.01   # 学习率\n",
    "momentum = 0.5         # 动量参数\n",
    "epochs = 10            # 训练轮次\n",
    "\n",
    "# 定义数据预处理流水线\n",
    "transform = transforms.Compose([\n",
    "    transforms.ToTensor(),  # 将图像转为PyTorch张量并归一化到[0,1]\n",
    "    transforms.Normalize((0.1307,), (0.3081,))  # 使用MNIST数据集的均值和标准差进行标准化\n",
    "])\n",
    "\n",
    "# 加载MNIST训练集\n",
    "train_dataset = datasets.MNIST(\n",
    "    root='../dataset/mnist',\n",
    "    train=True,\n",
    "    transform=transform,\n",
    "    download=True\n",
    ")\n",
    "\n",
    "# 构建训练集DataLoader\n",
    "train_loader = DataLoader(\n",
    "    dataset=train_dataset,\n",
    "    batch_size=batch_size,\n",
    "    shuffle=True  # 训练时打乱数据\n",
    ")\n",
    "\n",
    "# 加载MNIST测试集\n",
    "test_dataset = datasets.MNIST(\n",
    "    root='../dataset/mnist',\n",
    "    train=False,\n",
    "    transform=transform,\n",
    "    download=True\n",
    ")\n",
    "\n",
    "# 构建测试集DataLoader\n",
    "test_loader = DataLoader(\n",
    "    dataset=test_dataset,\n",
    "    batch_size=batch_size,\n",
    "    shuffle=False  # 测试时不需要打乱数据\n",
    ")\n",
    "\n",
    "\n",
    "class Net(torch.nn.Module):\n",
    "    \"\"\"定义卷积神经网络模型\"\"\"\n",
    "    def __init__(self):\n",
    "        super(Net, self).__init__()\n",
    "        # 第一个卷积层：1个输入通道，10个输出通道，5x5卷积核\n",
    "        self.conv1 = torch.nn.Conv2d(1, 10, kernel_size=5)\n",
    "        # 第二个卷积层：10个输入通道，20个输出通道，5x5卷积核\n",
    "        self.conv2 = torch.nn.Conv2d(10, 20, kernel_size=5)\n",
    "        # 最大池化层：2x2的池化窗口\n",
    "        self.pooling = torch.nn.MaxPool2d(2)\n",
    "        # 全连接层：320个输入特征，10个输出（对应10个数字）\n",
    "        self.fc1 = torch.nn.Linear(320, 10)\n",
    "\n",
    "    def forward(self, x):\n",
    "        \"\"\"前向传播函数\"\"\"\n",
    "        batch_size = x.size(0)  # 获取批次大小\n",
    "\n",
    "        # 第一层卷积 -> 池化 -> ReLU激活\n",
    "        x = F.relu(self.pooling(self.conv1(x)))\n",
    "        # 第二层卷积 -> 池化 -> ReLU激活\n",
    "        x = F.relu(self.pooling(self.conv2(x)))\n",
    "        # 展平特征图，为全连接层做准备\n",
    "        x = x.view(batch_size, -1)  # 结果为(batch_size, 320)\n",
    "        # 全连接层 -> ReLU激活\n",
    "        x = self.fc1(x)\n",
    "\n",
    "        return x\n",
    "\n",
    "\n",
    "# 选择合适的计算设备\n",
    "if torch.cuda.is_available():\n",
    "    device = torch.device(\"cuda\")\n",
    "elif torch.backends.mps.is_available():\n",
    "    device = torch.device(\"mps\")\n",
    "else:\n",
    "    device = torch.device(\"cpu\")\n",
    "print(f\"使用计算设备: {device}\")\n",
    "\n",
    "# 初始化模型并移动到指定设备\n",
    "model = Net().to(device)\n",
    "\n",
    "# 定义损失函数（交叉熵损失，适用于分类问题）\n",
    "criterion = torch.nn.CrossEntropyLoss()\n",
    "# 定义优化器（带动量的SGD）\n",
    "optimizer = optim.SGD(model.parameters(), lr=learning_rate, momentum=momentum)\n",
    "\n",
    "\n",
    "def train(epoch):\n",
    "    \"\"\"训练函数：执行一轮训练并返回平均损失\"\"\"\n",
    "    model.train()  # 设置模型为训练模式\n",
    "    running_loss = 0.0\n",
    "    total_batches = len(train_loader)\n",
    "\n",
    "    for batch_idx, (inputs, target) in enumerate(train_loader):\n",
    "        # 将数据移动到指定设备\n",
    "        inputs, target = inputs.to(device), target.to(device)\n",
    "\n",
    "        # 梯度清零\n",
    "        optimizer.zero_grad()\n",
    "\n",
    "        # 前向传播\n",
    "        outputs = model(inputs)\n",
    "        # 计算损失\n",
    "        loss = criterion(outputs, target)\n",
    "\n",
    "        # 反向传播和参数更新\n",
    "        loss.backward()\n",
    "        optimizer.step()\n",
    "\n",
    "        # 累加损失\n",
    "        running_loss += loss.item()\n",
    "\n",
    "        # 每100个批次打印一次中间结果\n",
    "        if batch_idx % 100 == 0:\n",
    "            print(f'训练轮次: [{epoch+1}/{epochs}], 批次: [{batch_idx}/{total_batches}], 损失: {loss.item():.6f}')\n",
    "\n",
    "    # 计算并返回本轮平均损失\n",
    "    avg_loss = running_loss / total_batches\n",
    "    return avg_loss\n",
    "\n",
    "\n",
    "def test():\n",
    "    \"\"\"测试函数：在测试集上评估模型并返回准确率\"\"\"\n",
    "    model.eval()  # 设置模型为评估模式\n",
    "    correct = 0\n",
    "    total = 0\n",
    "\n",
    "    # 测试时不需要计算梯度\n",
    "    with torch.no_grad():\n",
    "        for inputs, target in test_loader:\n",
    "            # 将数据移动到指定设备\n",
    "            inputs, target = inputs.to(device), target.to(device)\n",
    "\n",
    "            # 前向传播获取预测结果\n",
    "            outputs = model(inputs)\n",
    "            # 获取预测概率最大的类别\n",
    "            _, predicted = torch.max(outputs.data, 1)\n",
    "\n",
    "            # 统计总样本数和正确预测数\n",
    "            total += target.size(0)\n",
    "            correct += (predicted == target).sum().item()\n",
    "\n",
    "    # 计算准确率\n",
    "    accuracy = 100 * correct / total\n",
    "    print(f'测试准确率: {accuracy:.2f}% ({correct}/{total})\\n')\n",
    "    return accuracy\n",
    "\n",
    "\n",
    "if __name__ == '__main__':\n",
    "    # 初始化记录列表\n",
    "    epoch_list = []\n",
    "    loss_list = []\n",
    "    accuracy_list = []\n",
    "\n",
    "    # 训练循环\n",
    "    for epoch in range(epochs):\n",
    "        # 训练模型\n",
    "        avg_loss = train(epoch)\n",
    "        # 测试模型\n",
    "        accuracy = test()\n",
    "\n",
    "        # 记录数据\n",
    "        epoch_list.append(epoch + 1)\n",
    "        loss_list.append(avg_loss)\n",
    "        accuracy_list.append(accuracy)\n",
    "\n",
    "    # 绘制训练损失和测试准确率曲线\n",
    "    fig, ax1 = plt.subplots(figsize=(10, 6))\n",
    "\n",
    "    # 绘制训练损失曲线\n",
    "    ax1.plot(epoch_list, loss_list, 'b-', linewidth=2, label='训练损失')\n",
    "    ax1.set_xlabel('训练轮次')\n",
    "    ax1.set_ylabel('训练损失', color='b')\n",
    "    ax1.tick_params(axis='y', labelcolor='b')\n",
    "\n",
    "    # 创建第二个y轴用于绘制准确率\n",
    "    ax2 = ax1.twinx()\n",
    "    ax2.plot(epoch_list, accuracy_list, 'r-', linewidth=2, label='测试准确率')\n",
    "    ax2.set_ylabel('测试准确率 (%)', color='r')\n",
    "    ax2.tick_params(axis='y', labelcolor='r')\n",
    "    ax2.set_ylim(0, 100)  # 准确率范围限制在0-100%\n",
    "\n",
    "    # 添加图例和标题\n",
    "    lines1, labels1 = ax1.get_legend_handles_labels()\n",
    "    lines2, labels2 = ax2.get_legend_handles_labels()\n",
    "    ax1.legend(lines1 + lines2, labels1 + labels2, loc='best')\n",
    "    plt.title('MNIST分类模型训练损失与测试准确率')\n",
    "\n",
    "    # 显示图像\n",
    "    plt.tight_layout()\n",
    "    plt.show()\n"
   ],
   "id": "3e71bd745bc13c4f",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "使用计算设备: mps\n",
      "训练轮次: [1/10], 批次: [0/938], 损失: 2.324233\n",
      "训练轮次: [1/10], 批次: [100/938], 损失: 0.332283\n",
      "训练轮次: [1/10], 批次: [200/938], 损失: 0.281002\n",
      "训练轮次: [1/10], 批次: [300/938], 损失: 0.277769\n",
      "训练轮次: [1/10], 批次: [400/938], 损失: 0.135600\n",
      "训练轮次: [1/10], 批次: [500/938], 损失: 0.080785\n",
      "训练轮次: [1/10], 批次: [600/938], 损失: 0.173223\n",
      "训练轮次: [1/10], 批次: [700/938], 损失: 0.110995\n",
      "训练轮次: [1/10], 批次: [800/938], 损失: 0.190656\n",
      "训练轮次: [1/10], 批次: [900/938], 损失: 0.229450\n",
      "测试准确率: 96.85% (9685/10000)\n",
      "\n",
      "训练轮次: [2/10], 批次: [0/938], 损失: 0.083876\n",
      "训练轮次: [2/10], 批次: [100/938], 损失: 0.110068\n",
      "训练轮次: [2/10], 批次: [200/938], 损失: 0.018489\n",
      "训练轮次: [2/10], 批次: [300/938], 损失: 0.176465\n",
      "训练轮次: [2/10], 批次: [400/938], 损失: 0.141843\n",
      "训练轮次: [2/10], 批次: [500/938], 损失: 0.101356\n",
      "训练轮次: [2/10], 批次: [600/938], 损失: 0.080526\n",
      "训练轮次: [2/10], 批次: [700/938], 损失: 0.089506\n",
      "训练轮次: [2/10], 批次: [800/938], 损失: 0.127616\n",
      "训练轮次: [2/10], 批次: [900/938], 损失: 0.146126\n",
      "测试准确率: 97.80% (9780/10000)\n",
      "\n",
      "训练轮次: [3/10], 批次: [0/938], 损失: 0.146593\n",
      "训练轮次: [3/10], 批次: [100/938], 损失: 0.021074\n",
      "训练轮次: [3/10], 批次: [200/938], 损失: 0.079806\n",
      "训练轮次: [3/10], 批次: [300/938], 损失: 0.184326\n",
      "训练轮次: [3/10], 批次: [400/938], 损失: 0.074857\n",
      "训练轮次: [3/10], 批次: [500/938], 损失: 0.054649\n",
      "训练轮次: [3/10], 批次: [600/938], 损失: 0.129251\n",
      "训练轮次: [3/10], 批次: [700/938], 损失: 0.111166\n",
      "训练轮次: [3/10], 批次: [800/938], 损失: 0.024618\n",
      "训练轮次: [3/10], 批次: [900/938], 损失: 0.150988\n",
      "测试准确率: 98.03% (9803/10000)\n",
      "\n",
      "训练轮次: [4/10], 批次: [0/938], 损失: 0.011171\n",
      "训练轮次: [4/10], 批次: [100/938], 损失: 0.024127\n",
      "训练轮次: [4/10], 批次: [200/938], 损失: 0.012592\n",
      "训练轮次: [4/10], 批次: [300/938], 损失: 0.028479\n",
      "训练轮次: [4/10], 批次: [400/938], 损失: 0.034533\n",
      "训练轮次: [4/10], 批次: [500/938], 损失: 0.045102\n",
      "训练轮次: [4/10], 批次: [600/938], 损失: 0.072123\n",
      "训练轮次: [4/10], 批次: [700/938], 损失: 0.106611\n",
      "训练轮次: [4/10], 批次: [800/938], 损失: 0.032575\n",
      "训练轮次: [4/10], 批次: [900/938], 损失: 0.012620\n",
      "测试准确率: 98.40% (9840/10000)\n",
      "\n",
      "训练轮次: [5/10], 批次: [0/938], 损失: 0.018293\n",
      "训练轮次: [5/10], 批次: [100/938], 损失: 0.012804\n",
      "训练轮次: [5/10], 批次: [200/938], 损失: 0.158165\n",
      "训练轮次: [5/10], 批次: [300/938], 损失: 0.118913\n",
      "训练轮次: [5/10], 批次: [400/938], 损失: 0.030980\n",
      "训练轮次: [5/10], 批次: [500/938], 损失: 0.042021\n",
      "训练轮次: [5/10], 批次: [600/938], 损失: 0.069437\n",
      "训练轮次: [5/10], 批次: [700/938], 损失: 0.097444\n",
      "训练轮次: [5/10], 批次: [800/938], 损失: 0.186586\n",
      "训练轮次: [5/10], 批次: [900/938], 损失: 0.073216\n",
      "测试准确率: 98.41% (9841/10000)\n",
      "\n",
      "训练轮次: [6/10], 批次: [0/938], 损失: 0.105184\n",
      "训练轮次: [6/10], 批次: [100/938], 损失: 0.058370\n",
      "训练轮次: [6/10], 批次: [200/938], 损失: 0.102773\n",
      "训练轮次: [6/10], 批次: [300/938], 损失: 0.014415\n",
      "训练轮次: [6/10], 批次: [400/938], 损失: 0.090924\n",
      "训练轮次: [6/10], 批次: [500/938], 损失: 0.055779\n",
      "训练轮次: [6/10], 批次: [600/938], 损失: 0.094929\n",
      "训练轮次: [6/10], 批次: [700/938], 损失: 0.040635\n",
      "训练轮次: [6/10], 批次: [800/938], 损失: 0.027340\n",
      "训练轮次: [6/10], 批次: [900/938], 损失: 0.042311\n",
      "测试准确率: 98.59% (9859/10000)\n",
      "\n",
      "训练轮次: [7/10], 批次: [0/938], 损失: 0.046894\n",
      "训练轮次: [7/10], 批次: [100/938], 损失: 0.025810\n",
      "训练轮次: [7/10], 批次: [200/938], 损失: 0.058364\n",
      "训练轮次: [7/10], 批次: [300/938], 损失: 0.090305\n",
      "训练轮次: [7/10], 批次: [400/938], 损失: 0.102087\n",
      "训练轮次: [7/10], 批次: [500/938], 损失: 0.004847\n",
      "训练轮次: [7/10], 批次: [600/938], 损失: 0.074244\n",
      "训练轮次: [7/10], 批次: [700/938], 损失: 0.023210\n",
      "训练轮次: [7/10], 批次: [800/938], 损失: 0.004948\n",
      "训练轮次: [7/10], 批次: [900/938], 损失: 0.009243\n",
      "测试准确率: 98.73% (9873/10000)\n",
      "\n",
      "训练轮次: [8/10], 批次: [0/938], 损失: 0.031475\n",
      "训练轮次: [8/10], 批次: [100/938], 损失: 0.266257\n",
      "训练轮次: [8/10], 批次: [200/938], 损失: 0.025739\n",
      "训练轮次: [8/10], 批次: [300/938], 损失: 0.018752\n",
      "训练轮次: [8/10], 批次: [400/938], 损失: 0.062840\n",
      "训练轮次: [8/10], 批次: [500/938], 损失: 0.037481\n",
      "训练轮次: [8/10], 批次: [600/938], 损失: 0.071554\n",
      "训练轮次: [8/10], 批次: [700/938], 损失: 0.038025\n",
      "训练轮次: [8/10], 批次: [800/938], 损失: 0.003061\n",
      "训练轮次: [8/10], 批次: [900/938], 损失: 0.032757\n",
      "测试准确率: 98.55% (9855/10000)\n",
      "\n",
      "训练轮次: [9/10], 批次: [0/938], 损失: 0.047039\n",
      "训练轮次: [9/10], 批次: [100/938], 损失: 0.043339\n",
      "训练轮次: [9/10], 批次: [200/938], 损失: 0.002707\n",
      "训练轮次: [9/10], 批次: [300/938], 损失: 0.004975\n",
      "训练轮次: [9/10], 批次: [400/938], 损失: 0.023646\n",
      "训练轮次: [9/10], 批次: [500/938], 损失: 0.031459\n",
      "训练轮次: [9/10], 批次: [600/938], 损失: 0.027056\n",
      "训练轮次: [9/10], 批次: [700/938], 损失: 0.061464\n",
      "训练轮次: [9/10], 批次: [800/938], 损失: 0.002218\n",
      "训练轮次: [9/10], 批次: [900/938], 损失: 0.119446\n",
      "测试准确率: 98.52% (9852/10000)\n",
      "\n",
      "训练轮次: [10/10], 批次: [0/938], 损失: 0.008551\n",
      "训练轮次: [10/10], 批次: [100/938], 损失: 0.031201\n",
      "训练轮次: [10/10], 批次: [200/938], 损失: 0.011090\n",
      "训练轮次: [10/10], 批次: [300/938], 损失: 0.026471\n",
      "训练轮次: [10/10], 批次: [400/938], 损失: 0.080571\n",
      "训练轮次: [10/10], 批次: [500/938], 损失: 0.010514\n",
      "训练轮次: [10/10], 批次: [600/938], 损失: 0.026339\n",
      "训练轮次: [10/10], 批次: [700/938], 损失: 0.015484\n",
      "训练轮次: [10/10], 批次: [800/938], 损失: 0.008579\n",
      "训练轮次: [10/10], 批次: [900/938], 损失: 0.036021\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n",
      "findfont: Font family 'SimHei' not found.\n",
      "findfont: Font family 'WenQuanYi Micro Hei' not found.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "测试准确率: 98.83% (9883/10000)\n",
      "\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<Figure size 1000x600 with 2 Axes>"
      ],
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA90AAAJOCAYAAACqS2TfAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8ekN5oAAAACXBIWXMAAA9hAAAPYQGoP6dpAACOUElEQVR4nO3dB3hUZdrG8ZveCQgISFEQRUEFRVBREdfeFezdXcvae8HedhHrZ++u3bUrdrEBKogoKoKIggpBQFSa9JLvus+7J5kkE0ggycxk/r/rOmbmzMyZd0ow93neUi0vLy9PAAAAAACg3FUv/0MCAAAAAAAjdAMAAAAAUEEI3QAAAAAAVBBCNwAAAAAAFYTQDQAAAABABSF0AwAAAABQQQjdAAAAAABUEEI3AAAAAAAVhNANAAAAAEAFIXQDQJq65JJLlJubu9r7HXPMMfmXH330Ud1www0l3vfnn39WtWrV9NFHH0XX/dPXvd9Wrlypa6+9Vuuvv74aNWqkAw44QFOmTCl032Tb1VdfrYr0ww8/6J///KeGDh2av2/q1Kkl3j8vL08vv/yyPv/880L7x44dq1deeSW6/M033+jVV19d67b5/XnggQfy36dEfo4FCxbkX/f7m8wvv/yijz/+WL/99luh/UuXLtWIESOSPuann36KXp9f66qMGTNG9913n3788cf8fYsXL9aKFSsK3W/58uXR/tL49ddfo88i8Zir4+/YsGHDVvm5lWTkyJGaOXNmqe//j3/8Q3fccUehfSW99zZt2jRdd911euqpp8rcrr/97W96/vnno+tXXnml7rnnHq2JP/74Q9tss40+/PDDMj/2lltu0cUXX7xGzwsAqHiEbgBIUxMmTNCtt966yvu89dZbxYLjZZddpjfeeGONntPPd9VVV2nPPffUhRdeqFGjRmm77baLQslGG22kO++8M9r22msvrbPOOvnX99577xKPOXv27CjsOiROnjw5CoFFA19Rr732mnbdddfo/nFguv/++1W9evjf1owZM7T11ltHJwUcTIvyiYAjjjhCX3/9dXTdwdfP+cknn+SflPBJhJtuuin/+Inh+Prrr9dRRx0VhbcTTzwxfzvhhBN06qmnRgH1zz//jAKvA+gpp5xSLLD6RMFWW20VBbFYjx49dOCBB0aXFy5cGB3HHJ533HHHKHglcgjs3bt30pMD/ux7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XaV2II3H6MbcndsB2ZXbePxxSVz9dDU4Gf8R727LDhfuwuyw6JDvMcvxWODSclB0KHP336Kh29VVh5Fk3bFdtUvsAu22+vHuku6J1Vzxd5scLkuaHd0zUydyYHdl2hVjhx0Hco+XdlD2+Fi/Zw4sRbvne8xs0XXGXbX05+ITAObPyYG3pEnmHKgcpOJZwi2ead0hqqSJ2NyV3FVVfxficcaegduPcXd4n1iIg7PfS4+DdyB3xdPhblVLacVVWIdXh1mfyHAAdXdlh+OSuNu9Txy4/a6m+iSEu8D75ICf32Pnk3VT9+t45JFHSnyPHLzjbtgOk/FSWYn8WflzN4dVB2cvg+Zu9w6Y7nHgyffizz7ZyQzvc+8BzxvgqrBPUrha7e+XezW4gu8hET6uhyw4yPt+nqDP3xO/Dofx0i6h55MM/n74eePwHffSiE+YuN2eM8HfP4/jdlU6PmkSv+6YX7dPFpjfS5/AiE9i+Dvoz8Ovz88ZnxDyd9rP6VnTE09EAQAqWR4AAOVo7NixeVtuuWVerVq18t577738/b/++mveuHHj8rp165bXokWLEh+/YMGCvA8++CDvmGOOyatdu3bevvvum7dw4cL82x999NG86tWr53Xu3DnvrLPOyrv77rvz3n///WLHadq0ad6TTz6Zf/3111/Pa9u2bV7//v2j6/vvv39e165d84YNG1bocbNnz877+uuv877//vu8n376Ke+XX37Jmzp1arTtsssueccff3z+dd82efLkvAkTJuSNGTMmb/HixfnH8WU/n9v6zjvv5J166ql5TZo0yVu5cmV0+8UXXxzdbm+++aZTYt60adOi688991ze+uuvn3feeedFt82ZMydv5MiRefXr188bNGhQ3rJly/KWLl2ad8455+RtvfXW0WPGjx8fvV9PP/10dN235+bm5l122WXRsWM//vhj3kUXXRTd1+/xX3/9lXfSSSflVatWLXp9fj2J3KaTTz45un2jjTbK+/nnnwvd/swzz+TVq1cveo4uXbrknXDCCXmjRo3KK6vhw4dHx/i///u/Qvv9uvzcfl1//PFHXp8+ffKaNWuWN3369Oj2WbNmRe/jueeem/fDDz/kDR06NLp+xx13FDqOP2sf//bbb4/e3xo1auTtueee0ffnq6++yluxYkXekiVL8jp27Bh9t1q3bp3Xr1+//Mc/++yz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u83XqydZU3zq1Km69dZb9eqrr+qOO+7Q9ddfH4XdDTfcMOoq/u9//zsK5D5mXO22Tz/9VEcffXR0PS8vT4888kj0/L580EEH5T+Xn/9g54UiXcsd7h3a45MALVu2jLqoO2T7OK6yN23atILfMcQI3enulltS3QIAAAAg63lytIsuuiiqSHsc92677ZYfkuPQXNQ333wTBWWPzXY3cIf2+++/X3feeWd0u4O1A7CDsKvScZjff//9o+f55z//GQVnh3Pfx93Gi06s5v2JE6454B933HH5gdsWLFgQVeLdTm/u/o7KQ+gGAAAAkFJbby3NmFG5z9mqlTR6dOnv78rw+PHj9eijj0abuVt43L08mX322SfajjrqKB122GHaeeedownOPvzwQ911111q27atNtlkk2LrWxetmju433jjjbryyiuj54pvX758eRS43S6P2V66dGnUjb1Ro0aaNWtWFLB9u0O3j+Hqtx/jbvHutt6+fftobDcqFqEbAAAAQEo5cE+bpozjKrOVNCGZg+6gQYP0+++/68QTT9RPP/0UzTQ+YcIEXXDBBVFI9uRpvXv3joLwLrvsoptuuil6rPc7OL/55pv51XVXsB34fRxXqz2Bm4N1HNo9Frxbt27Rdc9w7tnU3Qbbaaedov1us5/X+x3++/btW2nvV7YidKc5DxMZN86/dNL/JkcEAAAAqhRXnTPxOV1B9gzjJa2l7bB8zTXXKCcnJ5pNfN9999Vpp52m7t27R7Obu8u6J0978skno6p5HN7vvffeaHkxX3c3dh/D+2LnnXdeVCWPu6nHvDSYj5m4hvh1110XLV3mruoeUx5zyC+pQo/yRehOY7//Lnlmf//829+k999PdYsAAACA8leWbt7p4l//+le0Nnfz5s1LvI+7ebtLd9FKuJcK89rdntnc1eevv/46WgrMa3+bu6S7+u2g7bHZzZo1K/T4P/74Ixr3XZSPlRi4f/75Z91yyy3RsY855phoXfAuXbpEt7FcWOUhdKcx/255jgOH7k8/9dko/3KkulUAAABA9nK3bE+Q5iW5HGTj9bhdqfZ46URTpkyJZhKfOHGivvjiC+Xm5kbreQ8cOFCDBw+OuoDHXb9PPvnkqOv48ccfH4219pbIz+Pn9nM4pG/tgfCS9thjj/zjJJo5c6Z233137bfffvrb3/6mc845J5op/Z133tHmm29ege8Qiio+rz3Shodm7LxzuOzAPXJkqlsEAAAAZDfPQu7qtYOzu4+72m3u1u3NHI69ebZyz1zuwO1g7e7dDsHuHu7u5u7i7a7p66yzji699FJdfvnl0XjrZP7xj39Et19xxRVRIH/77bejxzz33HPq2LFj/v38vM8884y22GKLqAv6Aw88EO0///zzo4ncttpqq6gNrrT75AEqHqE7zblbeezDD1PZEgAAAADTpk3TXnvtpQMPPFCvvPJKVD22/v376+mnn86venvr169fVHH+73//q1NPPTWqMJ9wwgm67LLLotDcs2fPaOIz85hrr7HtqrUf627hQ4cOjUK5J07z+G2v7e1A7aDtLugff/xxNGv5e++9Fx1j7NixUQB3Bd6Trr377rv53c0947kncXMbfTwvf+ax5qh41fLi6eyymLt5tGvXLlq83meD0klurtSuXbi8ww7S8OGpbhEAAACwZlzZdeDr0KFDxo4p9vJcDqu//PKLzjrrrCgYF1332rOQOyB7ma+SuJu4ZyZ3aK9fv36x2w844ICoan3ttddGz3fooYfqkEMOicK7x4qbb3fl2zOSx7Oeu4t6r1698sdul8QzqHu5ssr4fHPTOG9VBkJ3BnwJNtpI+vFHr/8nzZkjJfmdBAAAANJeVQjdiVauXFlsTe1sRuhOjm9IBnUxX7ZM+uSTVLcGAAAAgBG4URp8SzJAPJmaffBBKlsCAAAAACgLQneGhW4mUwMAAACAzEHozgAtW0rxPAijR0vz5qW6RQAAAACA0iB0Z9i47hUrmMEcAAAAADIFoTtDMK4bAAAAADIPoTtD7LSTVK1auMy4bgAAACB9rXD31FLer7T3nT17toYNG6Zly5ZFa3yPGzeuTG2aO3eu3nvvvVLff968eRoyZEj0XFg7hO4M0ayZ1K1buPzVV9Kff6a6RQAAAEB2GT9+vM477zz99ddf+vrrr6M1qX/++WdNnjxZX/mP9P/54IMPtOWWW0aXJ06cqFdeeSXp8bbaaiudfPLJGj16tN58881Cty1ZskR5eXn514cPH65dd91VEyZM0IcffqhtttlG8+fPL3bMBQsWJL3+wAMP6NJLL9XChQuLPcbB/88//4wCfWz69Onafffdo7W1E9v0+++/F2oXVq9mKe6DNBrX7d9lf8eHDpUOOijVLQIAAACyR6NGjfTNN9/olFNO0aeffqoaNWqoZs2aUVh1EHWwdUjt3LmzmrlqJunZZ5/VoEGD9O2332qDDTYodLycnBx17NgxCtE33nijcnNzVadOHa1cuVJ/+9vftM8++0RB2d555x0dd9xx2nzzzbXpppvqqKOO0syZM6M2OTS7Lda0adPocryG+LrrrqvBgwfr2muvjZ6vR48eUXgeOHCgDjvssOg+Pnmw0UYbRZf9uFq1auW30a+lWrVqUcXb7TKH/YYNG1bKe14VUOnOIIzrBgAAAFKnXbt2Ufi98847Va9ePX300UdRhfv9999X/fr1o8D92WefqXbt2vmPGTBggDp06KB77rmnUCXZIdYhePHixerXr190+2+//ZYffC+44AJdeeWVevXVV7V06VK9/PLLeuyxx1S3bt0o8PryZpttFgXkiy++OP+4rmRfffXVOuGEE6Iq98cff6wjjzxSjz/+eBTqfd9evXrlB27zyYBJkybpl19+iR7vSv7pp5+ut956K/+6j+Xqvu/ToEGDSnvPqwJCdwbp00f63wksxnUDAAAAlcxdu11VXmeddaJg7Iqxw3fchduXi3Il3JVmV5Z32WWX/Cq0w/Lrr7+u66+/Xp06ddKhhx6q+++/P/9xBx10UFT97tatmx588MGou7cDvrt333777dptt92ikD5jxowonCc+n7ui77vvvtH1Nm3aRNXts846K3qek046KRob3rZtW5122mn5j3G479+/f9TN/PPPP9eoUaO000476eijj9Zdd90VhfI999xTTz/9dFT5RunRvTyDNG4s9eghjRoled6EmTPDGt4AAAAAKt4RRxwRTTDmqrG5K7ir2iVVfv/v//4v6jruoP7EE09Ej3Ng9f0dvm+44YYoNLtq7e7pcfftmMePuwu5u4bHz+dKtwO7g7ur666Ce3/RCdN+/fVXXXTRRXrmmWei57ruuuui0H355ZdHFfpHH300Ctexs88+Wz/88EM0ttzd4d2F/cADD4y6krudhx9+uK666qqoaz3KhtCdgeO6Hbrto4+khF4hAAAAQGbaemtpxozKfc5WraTRo8v0EFeQHYBdJY4lBt6iTjzxRO23335R2G3cuHHUNd3B3SHYQfzee+/Vl19+Gd3XYTwel53otttu08477xwFZR8nUTz2+rvvvtMmm2wSXXbXd48n91jwM888MwrmJVWmE/c7xN9yyy3RZHGX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+5xzpDPPVCZiTDeylseQePKGEseSAGmI7y0yEd9bZCK+t8g0Ve4727Kl9MorqgoY0w0AAAAAQAWhezkAAAAAABWE0A0AACrFggUL9PDDD4tOdgCAbELoRlaaM2eOjj322Gg5hbZt2+rCCy/UkiVLUt0soNQuvvhiTZgwIdXNAMrkiiuu0C233KJly5aluilAiWbOnKkjjzxS66yzjtq1a6drr702WmMYSDe77rqrqlWrpsM9w3eCUaNGqWfPnqpbt666du2qN998M2VtREDoRlY65phj9OOPP+r111/XAw88oNdee03neEZEIAMMGzZMN998c6qbAZTJmDFjdNddd0X/5tauXTvVzQFKdMABB2j58uV666239J///EcvvviibrzxxlQ3CyjE31H/m3r66acX2j9r1iztueee2m677TRixAidcMIJ6t+/f/RvMFKHidSQdcaNG6cePXro559/VqtWraJ9/oeoV69e+uuvv6rOjI+okubNm6du3bpF39/vvvtOm2yySaqbBKyWq4TbbrutttxyS91///2pbg5Qoj/++EPNmzfXjBkz1NIzJ0t69tlnNWjQIH355Zepbh5QzNVXXx31fPvvf/8bXR84cKBefvnlqNodc/D28J7nnnsuhS3NblS6kZX/Q3U3nDhw28YbbxydMfztt99S2jZgdc4666zoD0Igk9x7772aOnVqFFyAdNa0adPoZOb111+vuXPnRt9bf3/d1RzIBMOHD1e/fv0K7Tv66KM1ZMiQlLUJhG5koT59+ujRRx8ttM/dzFu3bq311lsvZe0CVsdnrp9//nk99dRTqW4KUKbxsZdddlnUS8PjY/3H4J9//pnqZgFJVa9ePapsexhEkyZN1L59e40fP54hPcgYU6ZMUadOnQrt83XPZzR79uyUtSvbEbqR9aZNmxZVDy+//HLVqFEj1c0BknJXx5NPPjmahMo9M4BMcd1110WTVj755JPR2NgffvhBp5xySqqbBSQ1f/58HXbYYdp999314YcfRt9ZB296wiFTLFq0SPXr1y/Wg8PcxRypUTNFzwukBY/h3nfffaPJJk499dRUNwco0d///vdoTOw///nPVDcFKDUP23n88cf1wgsvRCHGfNnddx1i1l133VQ3ESjkkUceiU7Au2dRzZrhz2R/X3v37h1VEH0CCUhn9erV0+LFiwvtc5XbioZxVB4q3chaK1as0KGHHhpN8PPEE09ESy4A6cjjCT2Lrpf88B+B8R+Cm222WRRogHT1+++/R5XDrbfeOn9f586d1bBhQ/3yyy8pbRuQzPfff6+dd945/99Z69KlS3T966+/TmnbgNJwz4zJkycX2jdp0iTl5OQwN0EKEbqRtbzEwjfffKM33nhDjRo1SnVzgBK5Qjh27NjoD76vvvoq2syVmP333z/VzQNK5Eq2KyuJsz5PnDgx6uLYsWPHlLYNSGbDDTeM/r0tGlg8CWvbtm1T1i6gLHMXDR48uNA+z1PgNb2ROnQvR1byDLoPPfRQNMbQXcy91IL5f6iuwADp9kdgMhtttFE00Q+QzpNSnXHGGTrppJN05513RgH83HPPjZavadasWaqbBxRz/PHH64YbbtBpp52m4447Llrz+OKLL47W7u7QoUOqmwes1j/+8Y9oXfmLLrpIRx55pIYNGxb1ivOs5kgdQjeyjtcoHDBggLxE/RFHHFHoNlcODzzwwJS1DQCqGi+95PDtiQAXLlwYTVL1f//3f6luFpCUTwa9++67Ouecc7TTTjtFvTUOOuig6HsMZIIWLVro7bffjk4c3X777dHM5V75pEePHqluWlarlufkAQAAAAAAyh1jugEAAAAAqCCEbgAAAAAAKgihGwAAAACACkLoBgAAAACgghC6AQAAAACoIIRuAAAAAAAqCKEbAAAAAIAKQugGAAAAAKCCELoBAKgAK1eu1KJFi1Z5n4ULF1ZoG5YsWVLq+7otDz74oKZMmVKhbQIAINsQugEAqACHH364Tj755OjyzJkzVa1aNX355ZeFgvCBBx6os88+O//6bbfdFm1FHXnkkbr33ntLfK5PPvlEvXr10qRJk/L3zZkzRy1bttTtt9+e9DETJ04sdP3zzz+P2jt+/PgyvlIAALAqhG4AACrAhRdeqCeffFIfffSRGjVqFO1bd9119dhjj2nrrbeOrjdo0ECtW7eOLi9evFg33HCDWrVqFV3/66+/op/z5s3TCy+8oE022SS6vmLFivzb5s+frwULFmjo0KGqXbu2OnbsGO1zsL///vvVpk2b6PmL8kmArbbaSu+9917+vldffVW777679txzz0L39fMtW7asgt4lAACqPkI3AAAVoGfPnho1apT69u2r6tXD/25r1aqlhg0bqkmTJtH1GjVq5N/fXbt33XXXqEI+ZswYbb755qpbt24Uyl0lP/TQQ6PH1alTJ7qPDRo0KDreZZddpi+++CK6rXHjxnrppZeiCvfgwYO1fPlyXXfddYXa5gr41VdfreOPPz4K6e5a/tRTT+mDDz6InjPefLyaNWtq8uTJlfreAQBQlRC6AQAoR64yv/7663r77bejLt7x+O44ZMcBPNHUqVN166236uKLL9Ydd9wRVZyHDBkSjQnv3LlzVIWePn16dDyHaF+3yy+/XD/88IOaNm2qP/74Q0uXLo1C9AMPPBAda8MNN4y6pTuA9+vXT1999VX+c5511llRBf7jjz+OnrNbt27R87mKHm8O9T169IjaAAAA1kzNNXwcAABIwlXjiy66KAqt7iq+2267RV20zVXjZL755hvl5eXp2GOP1bfffhsFbncPv/POO6Pbjz766KibuQO9q95xhdzV6EcffVRHHXWUTjjhhKhr+MiRI9WiRYuoKu6K+ZZbbhkdb999943C+D333BM91t3RHcI9cdohhxwSdVH3cf3Yu+66K6qmu3u8jw0AANYcoRsAgHLkqrMnI3MY9mbxmGh3L09mn332iTYH3MMOO0w777yztt9+e3344YdRAG7btm00ptuBO9Gff/4ZhXPf75JLLokq16effnpUmd5000318MMPR/fz9bFjx0ZBO5FPBnTq1CmaRM33t9mzZ2uzzTaLLj/00EPaYIMNKuBdAgAgexC6AQCoYPGM5a5MJ+Mqt7ty//777zrxxBP1008/RWOsJ0yYoAsuuCDqNu6u3717944mXNtll1100003RRVyP8bjxl1Z95hsjwH3LOYO2A75o0ePjiroDuPeEl177bXRSQJ3RTcfy13hPdGag3f37t0r4d0BAKBqI3QDAFDBPMN4vXr1Ck2clsiB+ZprrlFOTo523HHHqCv4aaedFoVeh2h3WXfXcXf3dtU8Du877bRTFJSbNWsWPcYTox188MGFZlCfNm2azj333KiLeiJXtO+77778Luzmcegbb7yx3njjjSjYAwCAtcdEagAAVKB//etf0Tjt5s2bl3gfdwt3CJ4xY0ZU3b755puj5b/cTd3jw730l7uWf/3117r++uu1/vrrR4/zPo/d9rhsT7LmWcs9PtuVcnM3da/H7dDtQJ/Is5d36NAhP4w7zLva7snZXDF3mwEAwNojdAMAUAHcZdzdvx1uvXRXvB63w61nIE/k0PzOO+9EXcY9gdkOO+wQdREfOHBg9Ph4LLYr265Gx2PFPd7bXci9PNm4ceOiruH77bdftB647b333lFV3F3T//3vf0cVd/Pa3X7sVVddFQV3P87B3Jf9/N7vSrfbBAAA1g6hGwCACuBKsavXDs7uPt61a9dov7uKe4uDuTfPLu5x115r28Ha1WyH5/POOy/qbu5x3O6avs466+jSSy+NqtEe5+2u5K6Mewy2g/eBBx4YHadBgwbR0mSulHuN7UceeSR6jJcVM4frXr166YADDtDPP/8c/XzhhRf0zDPPRCH+oIMO0oABA6LQ7vHi7m4OAADWDGO6AQCoAB5Lvddee0VB2EE5rk73798/f7y0q97evIa2Zy6Px2o7HHsJsPPPPz+qbB9xxBHROtr2z3/+U4ceemhU/faSZN7MwTyesM0c3s8444zo+A0bNtRll12m9u3b59/mGc9dTfcs6Z407dNPP426tMfOOeecaLkxH6N+/fqV+M4BAFC1VMvzKXYAAFCuXGX2OOpffvlFZ511VrQOtivQiRy+e/TooRtvvLHE47gr+ptvvqldd911leHXk665yu3qeFk44HsitpL4z4SiS5UBAIDSI3QDAFDBPGba3b0BAED2IXQDAAAAAFBBOO0OAAAAAEAFIXQDAAAAAFBBCN0AAAAAAFQQQjcAAAAAABWE0A0AAAAAQAUhdAMAAAAAUEEI3QAAAAAAVBBCNwAAAAAAqhj/Dx46Kwm9XgZVAAAAAElFTkSuQmCC"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "execution_count": 12
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
